/**
 * 从请求中获取真实IP地址
 * 支持代理和负载均衡环境
 * @param {object} req Express请求对象
 * @returns {string} IP地址
 */
export function getClientIP(req) {
  // 尝试从各种可能的头部获取IP
  const forwarded = req.headers['x-forwarded-for'];
  const realIP = req.headers['x-real-ip'];
  const cfConnectingIP = req.headers['cf-connecting-ip']; // Cloudflare
  
  if (forwarded) {
    // x-forwarded-for 可能包含多个IP，取第一个
    return forwarded.split(',')[0].trim();
  }
  
  if (realIP) {
    return realIP.trim();
  }
  
  if (cfConnectingIP) {
    return cfConnectingIP.trim();
  }
  
  // 最后使用socket地址
  return req.socket.remoteAddress || req.connection.remoteAddress || '未知';
}

/**
 * 验证IP地址格式
 * @param {string} ip IP地址
 * @returns {boolean} 是否有效
 */
export function isValidIP(ip) {
  // IPv4正则
  const ipv4Regex = /^(\d{1,3}\.){3}\d{1,3}$/;
  // IPv6正则（简化版）
  const ipv6Regex = /^([0-9a-fA-F]{0,4}:){7}[0-9a-fA-F]{0,4}$/;
  
  return ipv4Regex.test(ip) || ipv6Regex.test(ip);
}

/**
 * 格式化IP地址（移除IPv6前缀）
 * @param {string} ip IP地址
 * @returns {string} 格式化后的IP
 */
export function formatIP(ip) {
  if (!ip) return '未知';
  
  // 移除IPv6的::ffff:前缀
  if (ip.startsWith('::ffff:')) {
    return ip.substring(7);
  }
  
  // 移除IPv6的localhost表示
  if (ip === '::1') {
    return '127.0.0.1';
  }
  
  return ip;
}

